#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL.Times;
using Cephei.QL;
using Cephei.QL.Indexes;
namespace Cephei.QL.Instruments
{
    /// <summary> 
	/// ! Quoted as a fixed rate \f$ K \f$.  At start: \f[ \sum_{i=1}^{M} P_n(0,t_i) N K = \sum_{i=1}^{M} P_n(0,t_i) N \left[ \frac{I(t_i)}{I(t_i-1)} - 1 \right] \f] where \f$ t_M \f$ is the maturity time, \f$ P_n(0,t) \f$ is the nominal discount factor at time \f$ t \f$, \f$ N \f$ is the notional, and \f$ I(t) \f$ is the inflation index value at time \f$ t \f$.  \note These instruments have now been changed to follow typical VanillaSwap type design conventions w.r.t. Schedules etc.
	/// </summary>
    [Guid ("EDFCAEA1-2680-4778-94EB-50032907BC5A"),ComVisible(true)]
	public interface IYearOnYearInflationSwap : Cephei.QL.Instruments.ISwap
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 Double FairRate {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double FixedRate {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double FairSpread {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Times.IDayCounter FixedDayCount {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.Core.IVector<Cephei.QL.ICashFlow> FixedLeg {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double FixedLegNPV {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Times.ISchedule FixedSchedule {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double Nominal {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Times.IPeriod ObservationLag {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Times.ICalendar PaymentCalendar {get;}
        /// <summary> 
		/// 
		/// </summary>
		 QL.Times.BusinessDayConventionEnum PaymentConvention {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double Spread {get;}
        /// <summary> 
		/// 
		/// </summary>
		 QL.Instruments.YearOnYearInflationSwap.TypeEnum Type {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Times.IDayCounter YoyDayCount {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Indexes.IYoYInflationIndex YoyInflationIndex {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.Core.IVector<Cephei.QL.ICashFlow> YoyLeg {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double YoyLegNPV {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Times.ISchedule YoySchedule {get;}
    }   

    /// <summary> 
	/// ! Quoted as a fixed rate \f$ K \f$.  At start: \f[ \sum_{i=1}^{M} P_n(0,t_i) N K = \sum_{i=1}^{M} P_n(0,t_i) N \left[ \frac{I(t_i)}{I(t_i-1)} - 1 \right] \f] where \f$ t_M \f$ is the maturity time, \f$ P_n(0,t) \f$ is the nominal discount factor at time \f$ t \f$, \f$ N \f$ is the notional, and \f$ I(t) \f$ is the inflation index value at time \f$ t \f$.  \note These instruments have now been changed to follow typical VanillaSwap type design conventions w.r.t. Schedules etc. Factory
	/// </summary>
   	[ComVisible(true)]
    public interface IYearOnYearInflationSwap_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        /// <summary> 
		/// 
		/// </summary>
	    IYearOnYearInflationSwap Create (QL.Instruments.YearOnYearInflationSwap.TypeEnum type, Double nominal, Cephei.QL.Times.ISchedule fixedSchedule, Double fixedRate, Cephei.QL.Times.IDayCounter fixedDayCount, Cephei.QL.Times.ISchedule yoySchedule, Cephei.QL.Indexes.IYoYInflationIndex yoyIndex, Cephei.QL.Times.IPeriod observationLag, Double spread, Cephei.QL.Times.IDayCounter yoyDayCount, Cephei.QL.Times.ICalendar paymentCalendar, Microsoft.FSharp.Core.FSharpOption<QL.Times.BusinessDayConventionEnum> paymentConvention, Cephei.QL.IPricingEngine QL_Pricer);
    }
}

